/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tomasio.projects.welcome.model;

import com.tomasio.projects.welcome.dto.EmailDTO;
import com.tomasio.projects.welcome.dto.FotoDTO;
import com.tomasio.projects.welcome.dto.PessoaDTO;
import com.tomasio.projects.welcome.dto.TelefoneDTO;
import com.tomasio.projects.welcome.dto.TranseunteDTO;
import com.tomasio.projects.welcome.dto.VeiculoDTO;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author administrador
 */
public class Pessoa extends Transeunte {

    private String posto;
    private String nome;
    private String nomeGuerra;
    private String cpf;
    private Identidade identidade;
    private Set<Veiculo> veiculos = new HashSet<Veiculo>();
    private Set<Foto> fotos = new HashSet<Foto>();
    private Set<Telefone> telefones = new HashSet<Telefone>();
    private Set<Email> emails = new HashSet<Email>();


    public Pessoa() {
    }

    public Pessoa(PessoaDTO dto) {
        if (dto != null) {
            fillAttributesFromDTO(dto);
            this.cpf = dto.getCpf();
            if (this.identidade != null) {
                this.identidade = new Identidade(dto.getIdentidade());
            }
            this.nome = dto.getNome();
            this.nomeGuerra = dto.getNomeGuerra();
            this.posto = dto.getPosto();

            for (VeiculoDTO veiculoDTO : dto.getVeiculos()) {
                this.veiculos.add(new Veiculo(veiculoDTO));
            }
            for (FotoDTO fotoDTO : dto.getFotos()) {
                this.fotos.add(new Foto(fotoDTO));
            }
            for (TelefoneDTO telefoneDTO : dto.getTelefones()) {
                this.telefones.add(new Telefone(telefoneDTO));
            }

            for (EmailDTO emailDTO : dto.getEmails()) {
                this.emails.add(new Email(emailDTO));
            }

        }
    }

    public Set<Email> getEmails() {
        return emails;
    }

    public void setEmails(Set<Email> emails) {
        this.emails = emails;
    }

    public Set<Telefone> getTelefones() {
        return telefones;
    }

    public void setTelefones(Set<Telefone> telefones) {
        this.telefones = telefones;
    }

    public Set<Foto> getFotos() {
        return fotos;
    }

    public void setFotos(Set<Foto> fotos) {
        this.fotos = fotos;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public Set<Veiculo> getVeiculos() {
        return veiculos;
    }

    public void setVeiculos(Set<Veiculo> veiculos) {
        this.veiculos = veiculos;
    }

    public Identidade getIdentidade() {
        return identidade;
    }

    public void setIdentidade(Identidade identidade) {
        this.identidade = identidade;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getNomeGuerra() {
        return nomeGuerra;
    }

    public void setNomeGuerra(String nomeGuerra) {
        this.nomeGuerra = nomeGuerra;
    }

    public String getPosto() {
        return posto;
    }

    public void setPosto(String posto) {
        this.posto = posto;
    }

    public void addVeiculo(Veiculo veiculo) {
        this.veiculos.add(veiculo);
    }

    public void addFoto(Foto foto) {
        this.fotos.add(foto);
    }

    public void addEmail(Email email){
        this.emails.add(email);
    }
    public void addTelefone(Telefone telefone){
        this.telefones.add(telefone);
    }
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Pessoa other = (Pessoa) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 29 * hash + (this.posto != null ? this.posto.hashCode() : 0);
        return hash;
    }

    @Override
    public PessoaDTO createDTO() {
        return (PessoaDTO) super.createDTO();
    }

    @Override
    protected TranseunteDTO instantiateDTO() {
        PessoaDTO dto = new PessoaDTO();
        dto.setCpf(cpf);
        if (identidade != null) {
            dto.setIdentidade(identidade.createDTO());
        }
        dto.setNome(nome);
        dto.setNomeGuerra(nomeGuerra);
        dto.setPosto(posto);

        Set<VeiculoDTO> veiculosDTO = new HashSet<VeiculoDTO>();
        for (Veiculo veiculo : veiculos) {
            veiculosDTO.add(veiculo.createDTO());
        }

        dto.setVeiculos(veiculosDTO);

        Set<EmailDTO> emailsDTO = new HashSet<EmailDTO>();
        for (Email email : emails) {
            emailsDTO.add(email.createDTO());
        }

        dto.setEmails(emailsDTO);

        Set<TelefoneDTO> telefonesDTO = new HashSet<TelefoneDTO>();
        for (Telefone telefone : telefones) {
            telefonesDTO.add(telefone.createDTO());
        }

        dto.setTelefones(telefonesDTO);


        Set<FotoDTO> fotosDTO = new HashSet<FotoDTO>();
        for (Foto foto : fotos) {
            fotosDTO.add(foto.createDTO());
        }
        dto.setFotos(fotosDTO);

        return dto;
    }
}
